package com.goodwill.androidtest.genericity;

import java.io.Serializable;
import java.util.HashMap;

class ArrayAlg {
    //注意: 类型变量放在修饰符(这里是public static)的后面, 返回类型的前面。
    public static <T> T getMiddle(T... a) {
        return a[a.length / 2];
    }

    /**
     * 这里有一个问题:
     * 请看一下min方法的代码内部。 变量smallest类型为T, 这意味着它可以是任何一个类的对象。 怎么才能确信T所属的类有compareTo方法呢？
     */
//    public static <T> T min(T[] a) // almost correct
//    {
//        if (a == null || a.length == 0) return null;
//        T smallest = a[0];
//        for (int i = 1; i < a.length; i++)
//            if (smallest.compareTo(a[i]) > 0) smallest = a[i];
//        return smallest;
//    }
    public static <T extends Comparable & Serializable> T min(T[] a) // almost correct
    {
        if (a == null || a.length == 0) return null;
        T smallest = a[0];
        for (int i = 1; i < a.length; i++)
            if (smallest.compareTo(a[i]) > 0) smallest = a[i];
        return smallest;
    }

}
